package toolsKit.csv;

import java.io.File;
import java.util.ArrayList;

public class CsvFile06 extends CsvFile05 {

	private CsvFile06() {
		super();
	}

	public CsvFile06(File file) {
		this(file, DEFAULT_SEPARATOR);
	}

	public CsvFile06(File file, char separator) {
		this(file, separator, false);
	}

	public CsvFile06(File file, char separator, boolean autoDetectSeparatorMode) {
		this();

		if (file == null) {
			throw new IllegalArgumentException("Le fichier file ne peut pas �tre null");
		}

		this.file = file;

		if (!autoDetectSeparatorMode) {
			if (!isValidSeparator(separator)) {
				throw new IllegalArgumentException("Le s�parateur sp�cifi� n'est pas pris en charge.");
			}
			this.separator = separator;
		}

		this.autoDetectSeparatorMode = autoDetectSeparatorMode;

		// Init
		init();
	}

	public Character selectBestSeparator() {

		if (cleanedLines.size() < 2) {
			                 System.out.println("No data");
                                         
		}

		for (Character separator : AVAILABLE_SEPARATORS) {
			final String ligneTitre = cleanedLines.get(0);
			if (cleanedLines.size() > 1){
                            final String ligne1 = cleanedLines.get(1);

                            final int compteLigneTitre = compterSeperateurs(ligneTitre, separator);
                            final int compteLigne1 = compterSeperateurs(ligne1, separator);

                            if (compteLigneTitre == 0 || compteLigne1 == 0) {
                                    continue;
                            }

                            if (compteLigneTitre == compteLigne1) {
                                    return separator;
                            }
                        }return separator;
		}

		return null;
	}

	private void init() {
		lines = CsvFileHelper.readFile(file);

		cleanLines();
          
		if (autoDetectSeparatorMode) {
			this.separator = selectBestSeparator();
		}

		data = new ArrayList<String[]>(cleanedLines.size());
		String regex = new Character(separator).toString();
		boolean first = true;
		for (String line : cleanedLines) {

			String[] oneData = line.split(regex);

			if (first) {
				titles = oneData;
				first = false;
			} else {
				data.add(oneData);
			}
		}

		mapData();
	}

	// GETTERS

}
